﻿#define _CRT_SECURE_NO_WARNINGS
//逻辑操作符
//&&-并且 ， ！-逻辑取反（改变单个表达式的真假） ， ||-或者

//1.“！”--逻辑取反
#include <stdio.h>
int main()
{
	int flag = 5;//这里给flag赋值为什么都无所谓
	scanf("%d", &flag);//这里输入0
	if (!flag)//这里表示flag为假要做什么事情
	{
		printf("do something\n");
	}
	return 0;
}


//2.逻辑与运算符--并且
//“全真即真，一假即假”
//下面是代码演示
//如果我们说⽉份是3⽉到5⽉，是春天，那使⽤代码怎么体现呢？
#include<stdio.h>
int main()
{
	int month = 0;
	scanf("%d\n", &month);
	if (month >= 3 && month <= 5);
	printf("春天");
	return 0;
}


//逻辑或运算符--或者
//我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天，那么我们怎么使⽤代码体现呢？
#include<stdio.h>
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month == 12 || month == 1 || month == 2);
	printf("冬天\n");
	return 0;
}


//练习：输⼊⼀个年份year，判断year是否是闰年
//1. 能被4整除并且不能被100整除是闰年
//2. 能被400整除是闰年
#include<stdio.h>
int main()
{
	int year = 0;
	scanf("%d", &year);
	if (year % 4 == 0 && year % 100 != 0)
		printf("闰年\n");
	if (year % 400 == 0)
		printf("闰年\n");
	return 0;
}

//以上是第一种表示，下面是第二种表示

int main()
{
	int year = 0;
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
		printf("是闰年\n");
	return 0;
}

//短路：C语⾔逻辑运算符还有⼀个特点，它总是先对左侧的表达式求值，再对右边的表达式求值，这个顺序是保证的。
//如果左边的表达式满⾜逻辑运算符的条件，就不再对右边的表达式求值。这种情况称为“短路”。
//eg--短路在并且中的表现
#include<stdio.h>
int main()
{
	int b = 0;
	if (b >= 3 && b <= 5)//如果输入b=4，满足前面，那么就会接着运算后面的式子
		//但如果输入b=1，前面的式子都不满足，那么就不在运算后面的式子
		printf("%d\n", b);
	return 0;
}

//短路在或者中的表现
#include<stdio.h>
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month == 12 || month == 1 || month == 2);//如果这里=12，那么就不再进行后面的运算
	//如果这里=1，那么算完第一个式子后，继续算第二个（这个时候满足了条件），然后就不再进行第三个式子的运算
	printf("冬天\n");
	return 0;
}

//所以可以粗鄙的理解为：式子运算的时候从左往右，遇到了满足条件的式子就停止，不再进行后面式子的运算，这个过程被叫做短路求职
// 。